<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Design</title>
<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="../index.html" title="Chapter 1. The Variadic Macro Data Library 1.10">
<link rel="up" href="../index.html" title="Chapter 1. The Variadic Macro Data Library 1.10">
<link rel="prev" href="../BOOST_VMD_IS_VMD_TUPLE.html" title="Macro BOOST_VMD_IS_VMD_TUPLE">
<link rel="next" href="vmd_compilers.html" title="Compilers">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../BOOST_VMD_IS_VMD_TUPLE.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="vmd_compilers.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="variadic_macro_data.vmd_design"></a><a class="link" href="vmd_design.html" title="Design">Design</a>
</h2></div></div></div>
<p>
      The initial impetus for creating this library was entirely practical. I had
      been working on another library of macro functionality, which used Boost PP
      functionality, and I realized that if I could use variadic macros with my other
      library, the end-user usability for that library would be easier. Therefore
      the initial main design goal of this library was to interoperate variadic macro
      data with Boost PP in the easiest and clearest way possible.
    </p>
<p>
      This led to the original versions of the library as an impetus for adding variadic
      macro data support to Boost PP. While this was being done, but the variadic
      macro data support had not yet been finalized in Boost PP, I still maintained
      the library in two modes, either its own variadic data functionality or deferring
      to the implementation of variadic macros in the Boost PP library.
    </p>
<p>
      Once support for variadic data had been added to Boost PP I stripped down the
      functionality of this library to only include variadic macro support for functionality
      which was an adjunct to the support in Boost PP. This functionality might be
      seen as experimental, since it largely relied on a macro which tested for empty
      input which Paul Mensonides, the author of Boost PP, had published on the Internet,
      and which by the very nature of the C++ preprocessor is slightly flawed but
      which was the closest approximation of such functionality which I believed
      could be made. I had to tweak this macro somewhat for the Visual C++ preprocessor,
      whose conformance to the C++ standard for macro processing is notably incorrect
      in a number of areas. But I still felt this functionality could be used in
      select situations and might be useful to others. Using this functionality I
      was able to build up some other macros which tested for the various Boost PP
      data types. I also was able to add in functionality, based on Paul Mendsonides
      excellent work, for handling tuples in preprocessing data.
    </p>
<p>
      All of this particular functionality is impossible to do effectively without
      the use of variadic macros. But I had kept these features at a minimum because
      of the difficulty of using variadic macros with compilers, most notably Visual
      C++, whose implementation of variadic macros is substandard and therefore very
      difficult to get to work correctly when variadic macros must be used.
    </p>
<p>
      I then realized that if I am going to have a library which takes advantage
      of variadic macros I should see what I could do in the area of parsing preprocessor
      data. This has led to a reorganization of the library as a set of macros largely
      for parsing preprocessor data. All of this is now built on top of my use of
      the almost perfect checking for emptiness which Paul Mensonides originally
      created.
    </p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 2010-2017 Tropic Software
      East Inc</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../BOOST_VMD_IS_VMD_TUPLE.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="vmd_compilers.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>
